package com.shhic.itsed.mws.deviceintf;

import java.util.Map;

/**
 * 设备接口
 * 设备初始化后，由设备的IP地址作为设备标识。
 * 
 * @author zhangwenshuo
 *
 */
public interface IDeviceIntf {
	

	/**
	 * 初始化设备
	 * 调用此方法后，驱动应对设备进行初始化。该方法没有异常返回。
	 * 上层调用后由设备驱动模块负责维护设备的链路，即使没有成功初始化设备，也要周期尝试去连接设备。
	 * @param readerIp	设备IP
	 * @param port	设备端口
	 */
	void initReader(String readerIp, int port);


	/**
	 * 带有参数的初始化设备
	 * @param readerIp	设备IP
	 * @param port	设备端口
	 * @param initParams	初始化参数，由实现类自行处理
	 */
	default void initReader(String readerIp, int port, Map<String, String> initParams) {
		initReader(readerIp,port);
	}

	/**
	 * 关闭设备
	 * 上层调用此后，驱动模块释放设备链路。
	 * @param readerIp
	 */
	void disconnectReader(String readerIp);

	/**
	 * 停止设备功能
	 * 设备清空正在执行的所有命令，但链路不释放
	 * @param readerIp
	 */
	void stopReaderCommand(String readerIp);

	/**
	 * 下发命令
	 * 上层应用负责拼装所有的命令，针对每个设备，只维护一个ReaderCommand对象即可。
	 * 如果重复调用，驱动只保留最新一个command
	 * @param readerIp
	 * @param cmd	操作命令，上层负责拼装，
	 * @param timeout	超时时间，如果为周期运行的任务，此参数传入-1，可忽略；否则该时间过后，驱动模块必须回调resultCallback
	 * @param resultCallback	操作结果回调函数
	 */
	void dispatchReadCommand(String readerIp, ReaderCommand cmd, int timeout, IReaderResultCallback resultCallback);

	/**
	 * 查询当前设备链路状态
	 * @param readerIp	
	 * @return 返回设备链路状态
	 */
	ReaderLinkStatusEnum queryDeviceLinkstatus(String readerIp);
	

}
